/**
 * 用户模块类型定义
 */
import type { PageParams } from './base';

/**
 * 用户相关API命名空间
 */
export namespace UserApi {
  /**
   * 用户登录参数
   */
  export interface LoginParams {
    /**
     * 用户名
     */
    username: string;

    /**
     * 密码
     */
    password: string;
  }

  /**
   * 用户基本信息
   */
  export interface UserInfoVO {
    /**
     * 用户ID
     */
    id: number;

    /**
     * 用户名
     */
    username: string;

    /**
     * 昵称
     */
    nickname: string;
  }

  /**
   * 用户登录返回结果
   */
  export interface UserLoginVO {
    /**
     * 访问令牌
     */
    token: string;

    /**
     * 过期时间（秒）
     */
    expire: number;

    /**
     * 用户信息
     */
    userInfo: UserInfoVO;
  }

  /**
   * 用户详细信息
   */
  export interface UserInfoDetailVO {
    /**
     * 用户ID
     */
    id: number;

    /**
     * 用户名
     */
    username: string;

    /**
     * 昵称
     */
    nickname: string;

    /**
     * 电子邮箱
     */
    email: string;

    /**
     * 手机号码
     */
    phone: string;

    /**
     * 头像
     */
    avatar: string;

    /**
     * 状态（0-禁用，1-启用）
     */
    status: number;

    /**
     * 最后登录时间
     */
    lastLoginTime: string;

    /**
     * 创建时间
     */
    createdTime: string;
  }

  /**
   * 用户注册参数
   */
  export interface RegisterParams {
    /**
     * 用户名
     */
    username: string;

    /**
     * 密码
     */
    password: string;

    /**
     * 昵称
     */
    nickname: string;

    /**
     * 电子邮箱
     */
    email?: string;

    /**
     * 手机号码
     */
    phone?: string;
  }

  /**
   * 用户注册结果
   */
  export interface UserRegisterVO {
    /**
     * 用户ID
     */
    id: number;

    /**
     * 用户名
     */
    username: string;

    /**
     * 昵称
     */
    nickname: string;

    /**
     * 电子邮箱
     */
    email: string;

    /**
     * 手机号码
     */
    phone: string;

    /**
     * 头像
     */
    avatar: string;

    /**
     * 状态
     */
    status: number;

    /**
     * 创建时间
     */
    createdTime: string;
  }

  /**
   * 用户更新参数
   */
  export interface UpdateParams {
    /**
     * 用户ID
     */
    id: number;

    /**
     * 昵称
     */
    nickname?: string;

    /**
     * 电子邮箱
     */
    email?: string;

    /**
     * 手机号码
     */
    phone?: string;

    /**
     * 头像
     */
    avatar?: string;
  }

  /**
   * 用户状态更新参数
   */
  export interface StatusUpdateParams {
    /**
     * 用户ID
     */
    userId: number;

    /**
     * 状态（0-禁用，1-启用）
     */
    status: number;
  }

  /**
   * 用户删除参数
   */
  export interface DeleteParams {
    /**
     * 用户ID
     */
    userId: number;
  }

  /**
   * 用户批量删除参数
   */
  export interface BatchDeleteParams {
    /**
     * 用户ID数组
     */
    userIds: number[];
  }

  /**
   * 密码修改参数
   */
  export interface PasswordChangeParams {
    /**
     * 用户ID
     */
    userId: number;

    /**
     * 旧密码
     */
    oldPassword: string;

    /**
     * 新密码
     */
    newPassword: string;

    /**
     * 确认密码
     */
    confirmPassword: string;
  }

  /**
   * 用户角色分配参数
   */
  export interface RoleAssignParams {
    /**
     * 用户ID
     */
    userId: number;

    /**
     * 角色ID数组
     */
    roleIds: number[];
  }

  /**
   * 用户角色移除参数
   */
  export interface RoleRemoveParams {
    /**
     * 用户ID
     */
    userId: number;

    /**
     * 角色ID
     */
    roleId: number;
  }

  /**
   * 用户列表查询参数
   */
  export interface UserListParams extends PageParams {
    /**
     * 用户名
     */
    username?: string;

    /**
     * 昵称
     */
    nickname?: string;

    /**
     * 电子邮箱
     */
    email?: string;

    /**
     * 手机号码
     */
    phone?: string;

    /**
     * 状态
     */
    status?: number;

    /**
     * 排序字段
     */
    sort?: string;

    /**
     * 排序方式
     */
    order?: string;
  }

  /**
   * 用户角色批量分配参数
   */
  export interface RoleBatchAssignParams {
    /**
     * 用户ID数组
     */
    userIds: number[];

    /**
     * 角色ID数组
     */
    roleIds: number[];
  }

  /**
   * 用户角色批量移除参数
   */
  export interface RoleBatchRemoveParams {
    /**
     * 用户ID数组
     */
    userIds: number[];

    /**
     * 角色ID数组
     */
    roleIds: number[];
  }
}
